package com.itheima.aop;
// 记录操作日志，进行权限控制，事务管理底层就是用Aop进行实现的
//优势：代码无侵入   减少重复代码  提高开发效率   维护方便m
//动态代理       在对一个目标对象进行/disadvantage：性能问题  切面过多会影响性能  切面过多会影响开发效率会产生一个代理对象，最后动态 依赖注入后的数据是代理对象。
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Slf4j

@Component
@Aspect//切面类
public class TimeAspect {
    @Around("execution(* com.itheima.service.*.*(..))") // 切入点表达式  在这个service里面都要使用在个方法  所有的方法都是连接点
    public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable { //切面

        //1.开始时间                                            通知

        Long startTime =    System.currentTimeMillis();
        //2.调用原始方法运行时间

        Object result = joinPoint.proceed();

        //3.结束时间

        Long endTime = System.currentTimeMillis();
        log.info("方法：{}，运行时间：耗时{}ms", joinPoint.getSignature().getName(), endTime - startTime);

        return result;
    }
}
